package edu.moravian.game;

import edu.moravian.math.Point2D;
import edu.moravian.world.World2D;
import java.awt.event.KeyEvent;

/**
 * This interface defines the required elements for any game that uses
 * the VideoController
 * 
 * @author mebjc01
 * @author ronaghan
 */
public interface Game 
{
  
    /**
     * Update the Game state by one frame
     * 
     * @param delta the time passed since the last update
     */
    void update(double delta);

    
    /**
     * Draw the current state of the game
     *
     * @param w2d the world with which to draw
     */
    void draw(World2D W2D);

    
    /**
     * Determine whether the game is complete (the program should
     * terminate)
     * @return true if the game is complete
     */
    boolean done();
    
    
    /**
     * handler for key events (key was pressed and released)
     * 
     * @param e the key event
     */
    void handleKeyTyped(KeyEvent e);
    
    
    /**
     * Handler for key press events 
     * 
     * @param e the key event
     */
    void handleKeyPress(KeyEvent e);
    
    
    /**
     * Handler for key release events
     * 
     * @param e the key event
     */
    void handleKeyRelease(KeyEvent e);
    
    
    /**
     * handler for mouse movement events
     * 
     * @param mouseLocation the current location of the mouse 
     * in terms of the world 
     */
    void handleMouseMoved(Point2D mouseLocation);
    
    
    
}
